#!/usr/bin/env python3
# coding: utf-8

"""
2024-08-04 F 
"""
import sys

from servermanagerutil import *


HELPS = """
运行参数:
第1位:
list        列出已启动的虚拟机
start       启动虚拟机(接受第2个参数,虚拟机名称) 如果名称=all则启动全部, 如果名称=auto则只启动必须的. 如果没有传第2个参数, 则默认=auto.如果此时主板还没通电会先通电再启动虚拟机
stop        停止虚拟机(接受第2个参数,虚拟机名称) 如果名称=all则关闭全部, 如果没有传第二个参数则默认=all (注意, 此时不关闭主板电源)
poweroff    关闭所有虚拟机, 并关闭主板电源
help        打印帮助

更新日志:
2024-08-04 harrydeep@wardyan.top PC版本v1
"""


def list() :
    vms = vm_list_active()
    print("当前启动的虚拟机:")
    print(vms)



def start(name : str) :
    ## 先检查主板电源, 如果之前已经打开电源了这里会忽略跳过
    board_poweron()
    ## 等待主板已经开了电  只等待10分钟, 超时报错
    idx = 0
    powerok = False
    while idx < 60 :
        status : str = ""
        try :
            status = board_powerstatus()
        except BaseException as e :
            print("获取主板电源状态失败, 错误信息:", e)
            time.sleep(10)
            continue
        
        if status == "on" :
            powerok = True
            break
        else :
            print("等待主板启动电源, 等待时间(秒):", idx * 10, "(最长等待10分钟)")
        idx += 1
        time.sleep(10)
    if not powerok :
        print("主板启动失败, 请检查电源是否通电")
        return
    print("启动虚拟机...")
    if name == "all" :
        print("启动全部虚拟机...")
        vm_poweron_all()
        print("已启动全部虚拟机")
        list()
    elif name == "auto" or name == "" :
        print("自动启动需要的虚拟机...")
        vm_poweron_normal()
        print("已自动启动需要的虚拟机")
        list()
    elif name in VMS.keys() :
        print("启动虚拟机:", name)
        vm_poweron(name)
        print("已启动虚拟机:", name)
    else :
        print("没有找到虚拟机:", name)
    


    
def stop(name : str) :
    print("关闭虚拟机...请注意,这里不会关闭主板电源")
    if name == "all" or name == "":
        print("关闭全部虚拟机...")
        vm_shutdown_all()
        print("已关闭全部虚拟机")
    elif name in VMS.keys() :
        print("关闭虚拟机:", name)
        vm_shutdown(name)
        print("已关闭虚拟机:", name)
    else :
        print("没有找到虚拟机:", name)

    

def poweroff() :
    ## 先检查主板电源
    print("关闭虚拟机并关闭电源...请注意,这里会关闭主板电源")
    try :
        vm_shutdown_all()
    except BaseException as e :
        print("关闭虚拟机失败, 错误信息:", e)
        print("忽略关闭失败信息")
    ## time.sleep(30)
    i = 30
    while i > 0 :
        print("已关闭全部虚拟机,准备关闭主板...", i, "秒后关闭电源")
        i -= 1
        time.sleep(1)
    board_poweroff()
    print("已关闭电源")
    

if __name__ == '__main__':
    args = sys.argv[1:]
    if args is not None and len(args) > 0 :
        print("服务器管理工具2024-08-04 V1 运行参数:", args)
        cmd = args[0]
        name : str = ""
        if len(args) > 1 :
            name = args[1]
        ## DO STH
        if name is None :
            name = ""
        name = name.lower()
        if cmd == "list":
           list()
        elif cmd == "start":
            start(name)
        elif cmd == "stop":
            stop(name)
        elif cmd == "poweroff":
            poweroff()
        elif cmd == "help":
            print(HELPS)
        else:
            print("未知的命令:", cmd)
            print(HELPS)

        



